home *** CD-ROM | disk | FTP | other *** search
/ Gamers Delight 2 / Gamers Delight 2.iso / Aminet / game / role / Ang261Lib.lha / src / wizard.c < prev   
C/C++ Source or Header  |  1994-10-22  |  47KB  |  1,955 lines

  1. /*
  2.  * wizard.c: Version history and info, and wizard mode debugging aids. 
  3.  *
  4.  * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke 
  5.  *
  6.  * This software may be copied and distributed for educational, research, and
  7.  * not for profit purposes provided that this copyright and statement are
  8.  * included in all such copies. 
  9.  */
  10.  
  11. #include <stdio.h>
  12. #include "constant.h"
  13. #include "config.h"
  14. #include "types.h"
  15. #include "externs.h"
  16. #include "monster.h"
  17.  
  18. #ifdef USG
  19. #ifndef ATARIST_MWC
  20. #include <string.h>
  21. #endif
  22. #else
  23. #include <strings.h>
  24. #endif
  25.  
  26. #ifndef linux
  27. long atol();
  28. #endif
  29.  
  30. int
  31. is_wizard(uid)
  32. int uid;
  33. {
  34.     FILE *fp;
  35.     char  buf[100];
  36.     int   test;
  37.  
  38.     if ((fp = my_tfopen(ANGBAND_WIZ, "r")) == NULL) {
  39.     fprintf(stderr, "Can't get wizard check...");
  40.     exit_game();
  41.     }
  42.     do {
  43.     (void)fgets(buf, sizeof buf, fp);
  44.     if (sscanf(buf, "%d", &test)) {
  45.         if (test == uid && buf[0] != '#') {
  46.         fclose(fp);
  47.         return TRUE;
  48.         }
  49.     }
  50.     } while (!feof(fp));
  51.     fclose(fp);
  52.     return FALSE;
  53. }
  54.  
  55. /* Check to see which artifacts have been seen         */
  56. void
  57. artifact_check()
  58. {
  59.     FILE *file1;
  60.     vtype filename;
  61.  
  62.     prt("Checking for artifacts that have been seen... ", 0, 0);
  63.     prt("File name: ", 0, 0);
  64.     if (get_string(filename, 0, 11, 64)) {
  65.     if (strlen(filename) == 0)
  66.         return;
  67.     if ((file1 = my_tfopen(filename, "w")) != NULL) {
  68.         (void)fprintf(file1, "Artifacts that have been seen\n");
  69.         (void)fprintf(file1, "\n");
  70.         if (GROND)
  71.         fprintf(file1, "Grond\n");
  72.         if (RINGIL)
  73.         fprintf(file1, "Ringil\n");
  74.         if (AEGLOS)
  75.         fprintf(file1, "Aeglos\n");
  76.         if (ARUNRUTH)
  77.         fprintf(file1, "Arunruth\n");
  78.         if (MORMEGIL)
  79.         fprintf(file1, "Mormegil\n");
  80.         if (ANGRIST)
  81.         fprintf(file1, "Angrist\n");
  82.         if (GURTHANG)
  83.         fprintf(file1, "Gurthang\n");
  84.         if (CALRIS)
  85.         fprintf(file1, "Calris\n");
  86.         if (ANDURIL)
  87.         fprintf(file1, "Anduril\n");
  88.         if (STING)
  89.         fprintf(file1, "Sting\n");
  90.         if (ORCRIST)
  91.         fprintf(file1, "Orcrist\n");
  92.         if (GLAMDRING)
  93.         fprintf(file1, "Glamdring\n");
  94.         if (DURIN)
  95.         fprintf(file1, "Durin\n");
  96.         if (AULE)
  97.         fprintf(file1, "Aule\n");
  98.         if (THUNDERFIST)
  99.         fprintf(file1, "Thunderfist\n");
  100.         if (BLOODSPIKE)
  101.         fprintf(file1, "Bloodspike\n");
  102.         if (DOOMCALLER)
  103.         fprintf(file1, "Doomcaller\n");
  104.         if (NARTHANC)
  105.         fprintf(file1, "Narthanc\n");
  106.         if (NIMTHANC)
  107.         fprintf(file1, "Nimthanc\n");
  108.         if (DETHANC)
  109.         fprintf(file1, "Dethanc\n");
  110.         if (GILETTAR)
  111.         fprintf(file1, "Gilettar\n");
  112.         if (RILIA)
  113.         fprintf(file1, "Rilia\n");
  114.         if (BELANGIL)
  115.         fprintf(file1, "Belangil\n");
  116.         if (BALLI)
  117.         fprintf(file1, "Balli Stonehand\n");
  118.         if (LOTHARANG)
  119.         fprintf(file1, "Lotharang\n");
  120.         if (FIRESTAR)
  121.         fprintf(file1, "Firestar\n");
  122.         if (ERIRIL)
  123.         fprintf(file1, "Eriril\n");
  124.         if (CUBRAGOL)
  125.         fprintf(file1, "Cubragol\n");
  126.         if (BARD)
  127.         fprintf(file1, "Longbow of Bard\n");
  128.         if (COLLUIN)
  129.         fprintf(file1, "Colluin\n");
  130.         if (HOLCOLLETH)
  131.         fprintf(file1, "Holcolleth\n");
  132.         if (TOTILA)
  133.         fprintf(file1, "Totila\n");
  134.         if (PAIN)
  135.         fprintf(file1, "Glaive of Pain\n");
  136.         if (ELVAGIL)
  137.         fprintf(file1, "Elvagil\n");
  138.         if (AGLARANG)
  139.         fprintf(file1, "Aglarang\n");
  140.         if (EORLINGAS)
  141.         fprintf(file1, "Eorlingas\n");
  142.         if (BARUKKHELED)
  143.         fprintf(file1, "Barukkheled\n");
  144.         if (WRATH)
  145.         fprintf(file1, "Trident of Wrath\n");
  146.         if (HARADEKKET)
  147.         fprintf(file1, "Haradekket\n");
  148.         if (MUNDWINE)
  149.         fprintf(file1, "Mundwine\n");
  150.         if (GONDRICAM)
  151.         fprintf(file1, "Gondricam\n");
  152.         if (ZARCUTHRA)
  153.         fprintf(file1, "Zarcuthra\n");
  154.         if (CARETH)
  155.         fprintf(file1, "Careth Asdriag\n");
  156.         if (FORASGIL)
  157.         fprintf(file1, "Forasgil\n");
  158.         if (CRISDURIAN)
  159.         fprintf(file1, "Crisdurian\n");
  160.         if (COLANNON)
  161.         fprintf(file1, "Colannon\n");
  162.         if (HITHLOMIR)
  163.         fprintf(file1, "Hithlomir\n");
  164.         if (THALKETTOTH)
  165.         fprintf(file1, "Thalkettoth\n");
  166.         if (ARVEDUI)
  167.         fprintf(file1, "Arvedui\n");
  168.         if (THRANDUIL)
  169.         fprintf(file1, "Thranduil\n");
  170.         if (THENGEL)
  171.         fprintf(file1, "Thengel\n");
  172.         if (HAMMERHAND)
  173.         fprintf(file1, "Hammerhand\n");
  174.         if (CELEGORM)
  175.         fprintf(file1, "Celegorm\n");
  176.         if (THROR)
  177.         fprintf(file1, "Thror\n");
  178.         if (MAEDHROS)
  179.         fprintf(file1, "Maedhros\n");
  180.         if (OLORIN)
  181.         fprintf(file1, "Olorin\n");
  182.         if (ANGUIREL)
  183.         fprintf(file1, "Anguirel\n");
  184.         if (OROME)
  185.         fprintf(file1, "Orome\n");
  186.         if (EONWE)
  187.         fprintf(file1, "Eonwe\n");
  188.         if (THEODEN)
  189.         fprintf(file1, "Theoden\n");
  190.         if (ULMO)
  191.         fprintf(file1, "Trident of Ulmo\n");
  192.         if (OSONDIR)
  193.         fprintf(file1, "Osondir\n");
  194.         if (TURMIL)
  195.         fprintf(file1, "Turmil\n");
  196.         if (TIL)
  197.         fprintf(file1, "Til-i-arc\n");
  198.         if (DEATHWREAKER)
  199.         fprintf(file1, "Deathwreaker\n");
  200.         if (AVAVIR)
  201.         fprintf(file1, "Avavir\n");
  202.         if (TARATOL)
  203.         fprintf(file1, "Taratol\n");
  204.         if (DOR_LOMIN)
  205.         fprintf(file1, "Dor-Lomin\n");
  206.         if (BELEGENNON)
  207.         fprintf(file1, "Belegennon\n");
  208.         if (FEANOR)
  209.         fprintf(file1, "Feanor\n");
  210.         if (ISILDUR)
  211.         fprintf(file1, "Isildur\n");
  212.         if (SOULKEEPER)
  213.         fprintf(file1, "Soulkeeper\n");
  214.         if (FINGOLFIN)
  215.         fprintf(file1, "Fingolfin\n");
  216.         if (ANARION)
  217.         fprintf(file1, "Anarion\n");
  218.         if (BELEG)
  219.         fprintf(file1, "Belthronding\n");
  220.         if (DAL)
  221.         fprintf(file1, "Dal-i-thalion\n");
  222.         if (PAURHACH)
  223.         fprintf(file1, "Paurhach\n");
  224.         if (PAURNIMMEN)
  225.         fprintf(file1, "Paurnimmen\n");
  226.         if (PAURAEGEN)
  227.         fprintf(file1, "Pauraegen\n");
  228.         if (PAURNEN)
  229.         fprintf(file1, "Paurnen\n");
  230.         if (CAMMITHRIM)
  231.         fprintf(file1, "Cammithrin\n");
  232.         if (CAMBELEG)
  233.         fprintf(file1, "Cambeleg\n");
  234.         if (HOLHENNETH)
  235.         fprintf(file1, "Holhenneth\n");
  236.         if (AEGLIN)
  237.         fprintf(file1, "Aeglin\n");
  238.         if (CAMLOST)
  239.         fprintf(file1, "Camlost\n");
  240.         if (NIMLOTH)
  241.         fprintf(file1, "Nimloth\n");
  242.         if (NAR)
  243.         fprintf(file1, "Nar-i-vagil\n");
  244.         if (BERUTHIEL)
  245.         fprintf(file1, "Beruthiel\n");
  246.         if (GORLIM)
  247.         fprintf(file1, "Gorlim\n");
  248.         if (THORIN)
  249.         fprintf(file1, "Thorin\n");
  250.         if (CELEBORN)
  251.         fprintf(file1, "Celeborn\n");
  252.         if (GONDOR)
  253.         fprintf(file1, "Gondor\n");
  254.         if (THINGOL)
  255.         fprintf(file1, "Thingol\n");
  256.         if (THORONGIL)
  257.         fprintf(file1, "Thorongil\n");
  258.         if (LUTHIEN)
  259.         fprintf(file1, "Luthien\n");
  260.         if (TUOR)
  261.         fprintf(file1, "Tuor\n");
  262.         if (ROHAN)
  263.         fprintf(file1, "Rohan\n");
  264.         if (CASPANION)
  265.         fprintf(file1, "Caspanion\n");
  266.         if (NARYA)
  267.         fprintf(file1, "Narya\n");
  268.         if (NENYA)
  269.         fprintf(file1, "Nenya\n");
  270.         if (VILYA)
  271.         fprintf(file1, "Vilya\n");
  272.         if (POWER)
  273.         fprintf(file1, "The One Ring\n");
  274.         if (PHIAL)
  275.         fprintf(file1, "The Phial of Galadriel\n");
  276.         if (INGWE)
  277.         fprintf(file1, "The Amulet of Ingwe\n");
  278.         if (CARLAMMAS)
  279.         fprintf(file1, "The Amulet of Carlammas\n");
  280.         if (TULKAS)
  281.         fprintf(file1, "The Ring of Tulkas\n");
  282.         if (NECKLACE)
  283.         fprintf(file1, "The Amulet of the Dwarves\n");
  284.         if (BARAHIR)
  285.         fprintf(file1, "The Ring of Barahir\n");
  286.         if (ELENDIL)
  287.         fprintf(file1, "The Star of Elendil\n");
  288.         if (THRAIN)
  289.         fprintf(file1, "The Arkenstone of Thrain\n");
  290.         if (RAZORBACK)
  291.         fprintf(file1, "Razorback\n");
  292.         if (BLADETURNER)
  293.         fprintf(file1, "Bladeturner\n");
  294.         (void)fclose(file1);
  295.         prt("Done...", 0, 0);
  296.     } else
  297.         prt("File could not be opened.", 0, 0);
  298.     } else
  299.     prt("File could not be opened.", 0, 0);
  300. }
  301.  
  302. /* Light up the dungeon                    -RAK-     */
  303. void
  304. wizard_light(light)
  305. int light;
  306. {
  307.     register cave_type *c_ptr;
  308.     register int        k, l, i, j;
  309.     int                 flag;
  310.  
  311.     if (!light) {
  312.     if (cave[char_row][char_col].pl)
  313.         flag = FALSE;
  314.     else
  315.         flag = TRUE;
  316.     } else {
  317.     flag = (light > 0) ? 1 : 0;
  318.     }
  319.     for (i = 0; i < cur_height; i++)
  320.     for (j = 0; j < cur_width; j++)
  321.         if (cave[i][j].fval <= MAX_CAVE_FLOOR)
  322.         for (k = i - 1; k <= i + 1; k++)
  323.             for (l = j - 1; l <= j + 1; l++) {
  324.             c_ptr = &cave[k][l];
  325.             c_ptr->pl = flag;
  326.             if (!flag)
  327.                 c_ptr->fm = FALSE;
  328.             }
  329.     prt_map();
  330. }
  331.  
  332.  
  333. /* Wizard routine for gaining on stats            -RAK-     */
  334. void
  335. change_character()
  336. {
  337.     register int          tmp_val;
  338.     register int32        tmp_lval;
  339.     int16u               *a_ptr;
  340.     vtype                 tmp_str;
  341.     register struct misc *m_ptr;
  342.  
  343.     a_ptr = py.stats.max_stat;
  344.     prt("(3 - 118) Strength     = ", 0, 0);
  345.     if (get_string(tmp_str, 0, 25, 3)) {
  346.     tmp_val = atoi(tmp_str);
  347.     if ((tmp_val > 2) && (tmp_val < 119)) {
  348.         a_ptr[A_STR] = tmp_val;
  349.         (void)res_stat(A_STR);
  350.     }
  351.     } else
  352.     return;
  353.  
  354.     prt("(3 - 118) Intelligence = ", 0, 0);
  355.     if (get_string(tmp_str, 0, 25, 3)) {
  356.     tmp_val = atoi(tmp_str);
  357.     if ((tmp_val > 2) && (tmp_val < 119)) {
  358.         a_ptr[A_INT] = tmp_val;
  359.         (void)res_stat(A_INT);
  360.     }
  361.     } else
  362.     return;
  363.  
  364.     prt("(3 - 118) Wisdom       = ", 0, 0);
  365.     if (get_string(tmp_str, 0, 25, 3)) {
  366.     tmp_val = atoi(tmp_str);
  367.     if ((tmp_val > 2) && (tmp_val < 119)) {
  368.         a_ptr[A_WIS] = tmp_val;
  369.         (void)res_stat(A_WIS);
  370.     }
  371.     } else
  372.     return;
  373.  
  374.     prt("(3 - 118) Dexterity    = ", 0, 0);
  375.     if (get_string(tmp_str, 0, 25, 3)) {
  376.     tmp_val = atoi(tmp_str);
  377.     if ((tmp_val > 2) && (tmp_val < 119)) {
  378.         a_ptr[A_DEX] = tmp_val;
  379.         (void)res_stat(A_DEX);
  380.     }
  381.     } else
  382.     return;
  383.  
  384.     prt("(3 - 118) Constitution = ", 0, 0);
  385.     if (get_string(tmp_str, 0, 25, 3)) {
  386.     tmp_val = atoi(tmp_str);
  387.     if ((tmp_val > 2) && (tmp_val < 119)) {
  388.         a_ptr[A_CON] = tmp_val;
  389.         (void)res_stat(A_CON);
  390.     }
  391.     } else
  392.     return;
  393.  
  394.     prt("(3 - 118) Charisma     = ", 0, 0);
  395.     if (get_string(tmp_str, 0, 25, 3)) {
  396.     tmp_val = atoi(tmp_str);
  397.     if ((tmp_val > 2) && (tmp_val < 119)) {
  398.         a_ptr[A_CHR] = tmp_val;
  399.         (void)res_stat(A_CHR);
  400.     }
  401.     } else
  402.     return;
  403.  
  404.     m_ptr = &py.misc;
  405.     prt("(1 - 32767) Hit points = ", 0, 0);
  406.     if (get_string(tmp_str, 0, 25, 5)) {
  407.     tmp_val = atoi(tmp_str);
  408.     if ((tmp_val > 0) && (tmp_val <= MAX_SHORT)) {
  409.         m_ptr->mhp = tmp_val;
  410.         m_ptr->chp = tmp_val;
  411.         m_ptr->chp_frac = 0;
  412.         prt_mhp();
  413.         prt_chp();
  414.     }
  415.     } else
  416.     return;
  417.  
  418.     prt("(0 - 32767) Mana       = ", 0, 0);
  419.     if (get_string(tmp_str, 0, 25, 5)) {
  420.     tmp_val = atoi(tmp_str);
  421.     if ((tmp_val > -1) && (tmp_val <= MAX_SHORT) && (*tmp_str != '\0')) {
  422.         m_ptr->mana = tmp_val;
  423.         m_ptr->cmana = tmp_val;
  424.         m_ptr->cmana_frac = 0;
  425.         prt_cmana();
  426.     }
  427.     } else
  428.     return;
  429.  
  430.     (void)sprintf(tmp_str, "Current=%ld  Gold = ", (long)m_ptr->au);
  431.     tmp_val = strlen(tmp_str);
  432.     prt(tmp_str, 0, 0);
  433.     if (get_string(tmp_str, 0, tmp_val, 7)) {
  434.     tmp_lval = atol(tmp_str);
  435.     if (tmp_lval > -1 && (*tmp_str != '\0')) {
  436.         m_ptr->au = tmp_lval;
  437.         prt_gold();
  438.     }
  439.     } else
  440.     return;
  441.     (void)sprintf(tmp_str, "Current=%ld  Max Exp = ", (long)m_ptr->max_exp);
  442.     tmp_val = strlen(tmp_str);
  443.     prt(tmp_str, 0, 0);
  444.     if (get_string(tmp_str, 0, tmp_val, 7)) {
  445.     tmp_lval = atol(tmp_str);
  446.     if (tmp_lval > -1 && (*tmp_str != '\0')) {
  447.         m_ptr->max_exp = tmp_lval;
  448.         prt_experience();
  449.     }
  450.     } else
  451.     return;
  452.  
  453.     (void)sprintf(tmp_str, "Current=%d  (0-200) Searching = ", m_ptr->srh);
  454.     tmp_val = strlen(tmp_str);
  455.     prt(tmp_str, 0, 0);
  456.     if (get_string(tmp_str, 0, tmp_val, 3)) {
  457.     tmp_val = atoi(tmp_str);
  458.     if ((tmp_val > -1) && (tmp_val < 201) && (*tmp_str != '\0'))
  459.         m_ptr->srh = tmp_val;
  460.     } else
  461.     return;
  462.  
  463.     (void)sprintf(tmp_str, "Current=%d  (-1-18) Stealth = ", m_ptr->stl);
  464.     tmp_val = strlen(tmp_str);
  465.     prt(tmp_str, 0, 0);
  466.     if (get_string(tmp_str, 0, tmp_val, 3)) {
  467.     tmp_val = atoi(tmp_str);
  468.     if ((tmp_val > -2) && (tmp_val < 19) && (*tmp_str != '\0'))
  469.         m_ptr->stl = tmp_val;
  470.     } else
  471.     return;
  472.  
  473.     (void)sprintf(tmp_str, "Current=%d  (0-200) Disarming = ", m_ptr->disarm);
  474.     tmp_val = strlen(tmp_str);
  475.     prt(tmp_str, 0, 0);
  476.     if (get_string(tmp_str, 0, tmp_val, 3)) {
  477.     tmp_val = atoi(tmp_str);
  478.     if ((tmp_val > -1) && (tmp_val < 201) && (*tmp_str != '\0'))
  479.         m_ptr->disarm = tmp_val;
  480.     } else
  481.     return;
  482.  
  483.     (void)sprintf(tmp_str, "Current=%d  (0-100) Save = ", m_ptr->save);
  484.     tmp_val = strlen(tmp_str);
  485.     prt(tmp_str, 0, 0);
  486.     if (get_string(tmp_str, 0, tmp_val, 3)) {
  487.     tmp_val = atoi(tmp_str);
  488.     if ((tmp_val > -1) && (tmp_val < 201) && (*tmp_str != '\0'))
  489.         m_ptr->save = tmp_val;
  490.     } else
  491.     return;
  492.  
  493.     (void)sprintf(tmp_str, "Current=%d  (0-200) Base to hit = ", m_ptr->bth);
  494.     tmp_val = strlen(tmp_str);
  495.     prt(tmp_str, 0, 0);
  496.     if (get_string(tmp_str, 0, tmp_val, 3)) {
  497.     tmp_val = atoi(tmp_str);
  498.     if ((tmp_val > -1) && (tmp_val < 201) && (*tmp_str != '\0'))
  499.         m_ptr->bth = tmp_val;
  500.     } else
  501.     return;
  502.  
  503.     (void)sprintf(tmp_str, "Current=%d  (0-200) Bows/Throwing = ", m_ptr->bthb);
  504.     tmp_val = strlen(tmp_str);
  505.     prt(tmp_str, 0, 0);
  506.     if (get_string(tmp_str, 0, tmp_val, 3)) {
  507.     tmp_val = atoi(tmp_str);
  508.     if ((tmp_val > -1) && (tmp_val < 201) && (*tmp_str != '\0'))
  509.         m_ptr->bthb = tmp_val;
  510.     } else
  511.     return;
  512.  
  513.     (void)sprintf(tmp_str, "Current=%d  Weight = ", m_ptr->wt);
  514.     tmp_val = strlen(tmp_str);
  515.     prt(tmp_str, 0, 0);
  516.     if (get_string(tmp_str, 0, tmp_val, 3)) {
  517.     tmp_val = atoi(tmp_str);
  518.     if (tmp_val > -1 && (*tmp_str != '\0'))
  519.         m_ptr->wt = tmp_val;
  520.     } else
  521.     return;
  522.  
  523.     while (get_com("Alter speed? (+/-)", tmp_str)) {
  524.     if (*tmp_str == '+')
  525.         change_speed(-1);
  526.     else if (*tmp_str == '-')
  527.         change_speed(1);
  528.     else
  529.         break;
  530.     prt_speed();
  531.     }
  532. }
  533.  
  534.  
  535. /* Wizard routine for creating objects            -RAK-     */
  536. void
  537. wizard_create()
  538. {
  539.     register int         tmp_val;
  540.     int                  i, j, k;
  541.     int32                tmp_lval;
  542.     char                 tmp_str[100];
  543.     register inven_type *i_ptr;
  544.     treasure_type        t_type, *t_ptr;
  545.     inven_type           forge;
  546.     register cave_type  *c_ptr;
  547.     char                 ch;
  548.     int                  more = FALSE;
  549.  
  550.     t_ptr = &t_type;
  551.     i_ptr = &forge;
  552.     i_ptr->name2 = 0;
  553.     i_ptr->ident = ID_KNOWN2 | ID_STOREBOUGHT;
  554.  
  555.     save_screen();
  556.     prt("What type of item?    : ", 0, 0);
  557.     prt("[W]eapon, [A]rmour, [O]thers.", 1, 0);
  558.     if (!get_com((char *)0, &ch)) {
  559.     restore_screen();
  560.     return;
  561.     }
  562.     switch (ch) {
  563.       case 'W':
  564.       case 'w':
  565.     prt("What type of Weapon?    : ", 0, 0);
  566.     prt("[S]word, [H]afted, [P]olearm, [B]ow, [A]mmo.", 1, 0);
  567.     if (!get_com((char *)0, &ch)) {
  568.         restore_screen();
  569.         return;
  570.     }
  571.     switch (ch) {
  572.       case 'S':
  573.       case 's':
  574.         i_ptr->tval = TV_SWORD;
  575.         break;
  576.       case 'H':
  577.       case 'h':
  578.         i_ptr->tval = TV_HAFTED;
  579.         break;
  580.       case 'P':
  581.       case 'p':
  582.         i_ptr->tval = TV_POLEARM;
  583.         break;
  584.       case 'B':
  585.       case 'b':
  586.         i_ptr->tval = TV_BOW;
  587.         break;
  588.       case 'A':
  589.       case 'a':
  590.         prt("What type of Ammo?    : ", 0, 0);
  591.         prt("[A]rrow, [B]olt, [P]ebble.", 1, 0);
  592.         if (!get_com((char *)0, &ch)) {
  593.         restore_screen();
  594.         return;
  595.         }
  596.         switch (ch) {
  597.           case 'A':
  598.           case 'a':
  599.         i_ptr->tval = TV_ARROW;
  600.         break;
  601.           case 'B':
  602.           case 'b':
  603.         i_ptr->tval = TV_BOLT;
  604.         break;
  605.           case 'P':
  606.           case 'p':
  607.         i_ptr->tval = TV_SLING_AMMO;
  608.         break;
  609.           default:
  610.         break;
  611.         }
  612.         break;
  613.       default:
  614.         restore_screen();
  615.         return;
  616.     }
  617.     break;
  618.       case 'A':
  619.       case 'a':
  620.     prt("What type of Armour?    : ", 0, 0);
  621.     prt("[A]rmour, [G]loves, [B]oots, [S]hields, [H]elms, [C]loaks.", 1, 0);
  622.     if (!get_com((char *)0, &ch)) {
  623.         restore_screen();
  624.         return;
  625.     }
  626.     switch (ch) {
  627.       case 'S':
  628.       case 's':
  629.         i_ptr->tval = TV_SHIELD;
  630.         break;
  631.       case 'H':
  632.       case 'h':
  633.         i_ptr->tval = TV_HELM;
  634.         break;
  635.       case 'G':
  636.       case 'g':
  637.         i_ptr->tval = TV_GLOVES;
  638.         break;
  639.       case 'B':
  640.       case 'b':
  641.         i_ptr->tval = TV_BOOTS;
  642.         break;
  643.       case 'C':
  644.       case 'c':
  645.         i_ptr->tval = TV_CLOAK;
  646.         break;
  647.       case 'A':
  648.       case 'a':
  649.         prt("What type of Armour?    : ", 0, 0);
  650.         prt("[H]ard armour, [S]oft armour.", 1, 0);
  651.         if (!get_com((char *)0, &ch)) {
  652.         restore_screen();
  653.         return;
  654.         }
  655.         switch (ch) {
  656.           case 'H':
  657.           case 'h':
  658.         i_ptr->tval = TV_HARD_ARMOR;
  659.         break;
  660.           case 'S':
  661.           case 's':
  662.         i_ptr->tval = TV_SOFT_ARMOR;
  663.         break;
  664.           default:
  665.         break;
  666.         }
  667.         break;
  668.       default:
  669.         restore_screen();
  670.         return;
  671.     }
  672.     break;
  673.       case 'O':
  674.       case 'o':
  675.     prt("What type of Object?    : ", 0, 0);
  676.     prt(
  677.         "[R]ing, [P]otion, [W]and/staff, [S]croll, [M]agicbook, [A]mulet, [T]ool.",
  678.         1, 0);
  679.     if (!get_com((char *)0, &ch)) {
  680.         restore_screen();
  681.         return;
  682.     }
  683.     switch (ch) {
  684.       case 'R':
  685.       case 'r':
  686.         i_ptr->tval = TV_RING;
  687.         break;
  688.       case 'P':
  689.       case 'p':
  690.         i_ptr->tval = TV_POTION1;
  691.         break;
  692.       case 'S':
  693.       case 's':
  694.         i_ptr->tval = TV_SCROLL1;
  695.         break;
  696.       case 'A':
  697.       case 'a':
  698.         i_ptr->tval = TV_AMULET;
  699.         break;
  700.       case 'W':
  701.       case 'w':
  702.         prt("Wand, Staff or Rod?    : ", 0, 0);
  703.         prt("[W]and, [S]taff, [R]od.", 1, 0);
  704.         if (!get_com((char *)0, &ch)) {
  705.         restore_screen();
  706.         return;
  707.         }
  708.         switch (ch) {
  709.           case 'W':
  710.           case 'w':
  711.         i_ptr->tval = TV_WAND;
  712.         break;
  713.           case 'S':
  714.           case 's':
  715.         i_ptr->tval = TV_STAFF;
  716.         break;
  717.           case 'R':
  718.           case 'r':
  719.         i_ptr->tval = TV_ROD;
  720.         break;
  721.           default:
  722.         restore_screen();
  723.         return;
  724.         }
  725.         break;
  726.       case 'M':
  727.       case 'm':
  728.         prt("Spellbook or Prayerbook?    : ", 0, 0);
  729.         prt("[S]pellbook, [P]rayerbook.", 1, 0);
  730.         if (!get_com((char *)0, &ch)) {
  731.         restore_screen();
  732.         return;
  733.         }
  734.         switch (ch) {
  735.           case 'P':
  736.           case 'p':
  737.         i_ptr->tval = TV_PRAYER_BOOK;
  738.         break;
  739.           case 'S':
  740.           case 's':
  741.         i_ptr->tval = TV_MAGIC_BOOK;
  742.         break;
  743.           default:
  744.         restore_screen();
  745.         return;
  746.         }
  747.         break;
  748.       case 'T':
  749.       case 't':
  750.         prt("Which Tool etc...?  : ", 0, 0);
  751.         prt("[S]pike, [D]igger, [C]hest, [L]ight, [F]ood, [O]il.", 1, 0);
  752.         if (!get_com((char *)0, &ch)) {
  753.         restore_screen();
  754.         return;
  755.         }
  756.         switch (ch) {
  757.           case 'S':
  758.           case 's':
  759.         i_ptr->tval = TV_SPIKE;
  760.         break;
  761.           case 'd':
  762.           case 'D':
  763.         i_ptr->tval = TV_DIGGING;
  764.         break;
  765.           case 'C':
  766.           case 'c':
  767.         i_ptr->tval = TV_CHEST;
  768.         break;
  769.           case 'L':
  770.           case 'l':
  771.         i_ptr->tval = TV_LIGHT;
  772.         break;
  773.           case 'F':
  774.           case 'f':
  775.         i_ptr->tval = TV_FOOD;
  776.         break;
  777.           case 'O':
  778.           case 'o':
  779.         i_ptr->tval = TV_FLASK;
  780.         break;
  781.           default:
  782.         restore_screen();
  783.         return;
  784.         }
  785.         break;
  786.       default:
  787.         restore_screen();
  788.         return;
  789.     }
  790.     break;
  791.       default:
  792.     restore_screen();
  793.     return;
  794.     }
  795.  
  796.     j = 0;
  797.     i = 0;
  798.     k = 0;
  799. again:
  800.     restore_screen();
  801.     save_screen();
  802.     prt("Which Item?  : ", 0, 0);
  803.     for (; i < MAX_DUNGEON_OBJ; i++) {
  804.     switch (i_ptr->tval) {
  805.       case TV_POTION1:
  806.         if ((object_list[i].tval == TV_POTION1) ||
  807.         (object_list[i].tval == TV_POTION2)) {
  808.         sprintf(tmp_str, "%c) %s", 'a' + j, object_list[i].name);
  809.         prt(tmp_str, 1 + j, 0);
  810.         j++;
  811.         }
  812.         break;
  813.       case TV_SCROLL1:
  814.         if ((object_list[i].tval == TV_SCROLL1) ||
  815.         (object_list[i].tval == TV_SCROLL2)) {
  816.         sprintf(tmp_str, "%c) %s", 'a' + j, object_list[i].name);
  817.         prt(tmp_str, 1 + j, 0);
  818.         j++;
  819.         }
  820.         break;
  821.       default:
  822.         if (object_list[i].tval == i_ptr->tval) {
  823.         sprintf(tmp_str, "%c) %s", 'a' + j, object_list[i].name);
  824.         prt(tmp_str, 1 + j, 0);
  825.         j++;
  826.         }
  827.         break;
  828.     }
  829.     if (j == 21) {
  830.         more = TRUE;
  831.         break;
  832.     }
  833.     }
  834.     if (j < 21) {
  835.     for (i = (i - (MAX_DUNGEON_OBJ - 1)) + (SPECIAL_OBJ - 1); i < MAX_OBJECTS; i++) {
  836.         switch (i_ptr->tval) {
  837.           case TV_POTION1:
  838.         if ((object_list[i].tval == TV_POTION1) ||
  839.             (object_list[i].tval == TV_POTION2)) {
  840.             sprintf(tmp_str, "%c) %s", 'a' + j, object_list[i].name);
  841.             prt(tmp_str, 1 + j, 0);
  842.             j++;
  843.         }
  844.         break;
  845.           case TV_SCROLL1:
  846.         if ((object_list[i].tval == TV_SCROLL1) ||
  847.             (object_list[i].tval == TV_SCROLL2)) {
  848.             sprintf(tmp_str, "%c) %s", 'a' + j, object_list[i].name);
  849.             prt(tmp_str, 1 + j, 0);
  850.             j++;
  851.         }
  852.         break;
  853.           default:
  854.         if (object_list[i].tval == i_ptr->tval) {
  855.             sprintf(tmp_str, "%c) %s", 'a' + j, object_list[i].name);
  856.             prt(tmp_str, 1 + j, 0);
  857.             j++;
  858.         }
  859.         break;
  860.         }
  861.         if (j == 21) {
  862.         more = TRUE;
  863.         break;
  864.         }
  865.     }
  866.     }
  867.     if (more)
  868.     prt("v) NEXT PAGE", 22, 0);
  869.  
  870.     do {
  871.     if (!get_com((char *)0, &ch)) {
  872.         restore_screen();
  873.         return;
  874.     }
  875.     } while ((ch < 'a' && ch > ('a' + j)) || (more && ch < 'a' && ch > ('a' + j + 1)));
  876.  
  877.     if ((ch == 'v') && more) {
  878.     more = FALSE;
  879.     k += (j - 1);
  880.     j = 0;
  881.     goto again;
  882.     }
  883.     k += (ch - 'a' + 1);
  884.  
  885.     j = 0;
  886.     for (i = 0; i < MAX_DUNGEON_OBJ; i++) {
  887.     switch (i_ptr->tval) {
  888.       case TV_POTION1:
  889.         if ((object_list[i].tval == TV_POTION1) ||
  890.         (object_list[i].tval == TV_POTION2)) {
  891.         j++;
  892.         }
  893.         break;
  894.       case TV_SCROLL1:
  895.         if ((object_list[i].tval == TV_SCROLL1) ||
  896.         (object_list[i].tval == TV_SCROLL2)) {
  897.         j++;
  898.         }
  899.         break;
  900.       default:
  901.         if (object_list[i].tval == i_ptr->tval) {
  902.         j++;
  903.         }
  904.         break;
  905.     }
  906.     if (j == k)
  907.         break;
  908.     }
  909.     if (j != k) {
  910.     for (i = (SPECIAL_OBJ - 1); i < MAX_OBJECTS; i++) {
  911.         switch (i_ptr->tval) {
  912.           case TV_POTION1:
  913.         if ((object_list[i].tval == TV_POTION1) ||
  914.             (object_list[i].tval == TV_POTION2)) {
  915.             j++;
  916.         }
  917.         break;
  918.           case TV_SCROLL1:
  919.         if ((object_list[i].tval == TV_SCROLL1) ||
  920.             (object_list[i].tval == TV_SCROLL2)) {
  921.             j++;
  922.         }
  923.         break;
  924.           default:
  925.         if (object_list[i].tval == i_ptr->tval) {
  926.             j++;
  927.         }
  928.         break;
  929.         }
  930.         if (j == k)
  931.         break;
  932.     }
  933.     }
  934.     if (j != k) {
  935.     restore_screen();
  936.     return;
  937.     }
  938.     invcopy(i_ptr, i);
  939.     i_ptr->timeout = 0;
  940.     restore_screen();
  941.     save_screen();
  942.  
  943.     prt("Number of items? [return=1]: ", 0, 0);
  944.     if (!get_string(tmp_str, 0, 33, 5))
  945.     goto end;
  946.     tmp_val = atoi(tmp_str);
  947.     if (tmp_val != 0)
  948.     i_ptr->number = tmp_val;
  949.  
  950.     prt("Weight of item? [return=default]: ", 0, 0);
  951.     if (!get_string(tmp_str, 0, 35, 5))
  952.     goto end;
  953.     tmp_val = atoi(tmp_str);
  954.     if (tmp_val != 0)
  955.     i_ptr->weight = tmp_val;
  956.  
  957.     if ((i_ptr->tval == TV_SWORD) ||
  958.     (i_ptr->tval == TV_HAFTED) ||
  959.     (i_ptr->tval == TV_POLEARM) ||
  960.     (i_ptr->tval == TV_ARROW) ||
  961.     (i_ptr->tval == TV_BOLT) ||
  962.     (i_ptr->tval == TV_SLING_AMMO) ||
  963.     (i_ptr->tval == TV_DIGGING)) {
  964.     i_ptr->ident |= ID_SHOW_HITDAM;
  965.     prt("Damage (dice): ", 0, 0);
  966.     if (!get_string(tmp_str, 0, 15, 3))
  967.         goto end;
  968.     tmp_val = atoi(tmp_str);
  969.     if (tmp_val != 0)
  970.         i_ptr->damage[0] = tmp_val;
  971.     prt("Damage (sides): ", 0, 0);
  972.     if (!get_string(tmp_str, 0, 16, 3))
  973.         goto end;
  974.     tmp_val = atoi(tmp_str);
  975.     if (tmp_val != 0)
  976.         i_ptr->damage[1] = tmp_val;
  977.     }
  978.     prt("+To hit: ", 0, 0);
  979.     if (!get_string(tmp_str, 0, 9, 3))
  980.     goto end;
  981.     tmp_val = atoi(tmp_str);
  982.     if (tmp_val != 0)
  983.     i_ptr->tohit = tmp_val;
  984.  
  985.     prt("+To dam: ", 0, 0);
  986.     if (!get_string(tmp_str, 0, 9, 3))
  987.     goto end;
  988.     tmp_val = atoi(tmp_str);
  989.     if (tmp_val != 0)
  990.     i_ptr->todam = tmp_val;
  991.  
  992.     if ((i_ptr->tval == TV_SOFT_ARMOR) ||
  993.     (i_ptr->tval == TV_HARD_ARMOR) ||
  994.     (i_ptr->tval == TV_HELM) ||
  995.     (i_ptr->tval == TV_CLOAK) ||
  996.     (i_ptr->tval == TV_BOOTS) ||
  997.     (i_ptr->tval == TV_GLOVES) ||
  998.     (i_ptr->tval == TV_SHIELD)) {
  999.     prt("Base AC : ", 0, 0);
  1000.     if (!get_string(tmp_str, 0, 10, 3))
  1001.         goto end;
  1002.     tmp_val = atoi(tmp_str);
  1003.     if (tmp_val != 0)
  1004.         i_ptr->ac = tmp_val;
  1005.     }
  1006.     prt("+To AC : ", 0, 0);
  1007.     if (!get_string(tmp_str, 0, 9, 3))
  1008.     goto end;
  1009.     tmp_val = atoi(tmp_str);
  1010.     if (tmp_val != 0)
  1011.     i_ptr->toac = tmp_val;
  1012.  
  1013.     prt("Magic Plus Flag  : ", 0, 0);
  1014.     if (!get_string(tmp_str, 0, 20, 5))
  1015.     goto end;
  1016.     tmp_val = atoi(tmp_str);
  1017.     if (tmp_val != 0)
  1018.     i_ptr->p1 = tmp_val;
  1019.  
  1020.  
  1021.     save_screen();
  1022.     if ((i_ptr->tval <= TV_MAX_WEAR) && (i_ptr->tval >= TV_MIN_WEAR)) {
  1023.  
  1024.     /* only then bother with TR_* flags, since otherwise they are meaningless... -CFT */
  1025.     if ((i_ptr->tval == TV_SWORD) ||
  1026.         (i_ptr->tval == TV_HAFTED) ||
  1027.         (i_ptr->tval == TV_POLEARM) ||
  1028.         (i_ptr->tval == TV_ARROW) ||
  1029.         (i_ptr->tval == TV_BOLT) ||
  1030.         (i_ptr->tval == TV_SLING_AMMO) ||
  1031.         (i_ptr->tval == TV_DIGGING)) {
  1032.         if (get_com("Slay Evil? [yn]: ", &ch)) {
  1033.         if (ch == 'y' || ch == 'Y')
  1034.             i_ptr->flags |= TR_SLAY_EVIL;
  1035.         } else if (ch == '\033')
  1036.         goto end;
  1037.         if (get_com("Slay Animal? [yn]: ", &ch)) {
  1038.         if (ch == 'y' || ch == 'Y')
  1039.             i_ptr->flags |= TR_SLAY_ANIMAL;
  1040.         } else if (ch == '\033')
  1041.         goto end;
  1042.         if (get_com("Slay Undead? [yn]: ", &ch)) {
  1043.         if (ch == 'y' || ch == 'Y')
  1044.             i_ptr->flags |= TR_SLAY_UNDEAD;
  1045.         } else if (ch == '\033')
  1046.         goto end;
  1047.         if (get_com("Slay Giant? [yn]: ", &ch)) {
  1048.         if (ch == 'y' || ch == 'Y')
  1049.             i_ptr->flags2 |= TR_SLAY_GIANT;
  1050.         } else if (ch == '\033')
  1051.         goto end;
  1052.         if (get_com("Slay Demon? [yn]: ", &ch)) {
  1053.         if (ch == 'y' || ch == 'Y')
  1054.             i_ptr->flags2 |= TR_SLAY_DEMON;
  1055.         } else if (ch == '\033')
  1056.         goto end;
  1057.         if (get_com("Slay Troll? [yn]: ", &ch)) {
  1058.         if (ch == 'y' || ch == 'Y')
  1059.             i_ptr->flags2 |= TR_SLAY_TROLL;
  1060.         } else if (ch == '\033')
  1061.         goto end;
  1062.         if (get_com("Slay Orc? [yn]: ", &ch)) {
  1063.         if (ch == 'y' || ch == 'Y')
  1064.             i_ptr->flags2 |= TR_SLAY_ORC;
  1065.         } else if (ch == '\033')
  1066.         goto end;
  1067.         if (get_com("Slay Dragon? [yn]: ", &ch)) {
  1068.         if (ch == 'y' || ch == 'Y')
  1069.             i_ptr->flags |= TR_SLAY_DRAGON;
  1070.         } else if (ch == '\033')
  1071.         goto end;
  1072.         if (get_com("Execute Dragon? [yn]: ", &ch)) {
  1073.         if (ch == 'y' || ch == 'Y')
  1074.             i_ptr->flags |= TR_SLAY_X_DRAGON;
  1075.         } else if (ch == '\033')
  1076.         goto end;
  1077.         if (get_com("Frost Brand? [yn]: ", &ch)) {
  1078.         if (ch == 'y' || ch == 'Y')
  1079.             i_ptr->flags |= TR_FROST_BRAND;
  1080.         } else if (ch == '\033')
  1081.         goto end;
  1082.         if (get_com("Fire Brand? [yn]: ", &ch)) {
  1083.         if (ch == 'y' || ch == 'Y')
  1084.             i_ptr->flags |= TR_FLAME_TONGUE;
  1085.         } else if (ch == '\033')
  1086.         goto end;
  1087.         if (get_com("Lightning Brand? [yn]: ", &ch)) {
  1088.         if (ch == 'y' || ch == 'Y')
  1089.             i_ptr->flags2 |= TR_LIGHTNING;
  1090.         } else if (ch == '\033')
  1091.         goto end;
  1092.         if (get_com("Earthquake Brand? [yn]: ", &ch)) {
  1093.         if (ch == 'y' || ch == 'Y')
  1094.             i_ptr->flags2 |= TR_IMPACT;
  1095.         } else if (ch == '\033')
  1096.         goto end;
  1097.     }
  1098.     if (get_com("Affect Strength? [yn]: ", &ch)) {
  1099.         if (ch == 'y' || ch == 'Y')
  1100.         i_ptr->flags |= TR_STR;
  1101.     } else if (ch == '\033')
  1102.         goto end;
  1103.     if (get_com("Affect Intelligence? [yn]: ", &ch)) {
  1104.         if (ch == 'y' || ch == 'Y')
  1105.         i_ptr->flags |= TR_INT;
  1106.     } else if (ch == '\033')
  1107.         goto end;
  1108.     if (get_com("Affect Wisdom? [yn]: ", &ch)) {
  1109.         if (ch == 'y' || ch == 'Y')
  1110.         i_ptr->flags |= TR_WIS;
  1111.     } else if (ch == '\033')
  1112.         goto end;
  1113.     if (get_com("Affect Dexterity? [yn]: ", &ch)) {
  1114.         if (ch == 'y' || ch == 'Y')
  1115.         i_ptr->flags |= TR_DEX;
  1116.     } else if (ch == '\033')
  1117.         goto end;
  1118.     if (get_com("Affect Constitution? [yn]: ", &ch)) {
  1119.         if (ch == 'y' || ch == 'Y')
  1120.         i_ptr->flags |= TR_CON;
  1121.     } else if (ch == '\033')
  1122.         goto end;
  1123.     if (get_com("Affect Charisma? [yn]: ", &ch)) {
  1124.         if (ch == 'y' || ch == 'Y')
  1125.         i_ptr->flags |= TR_CHR;
  1126.     } else if (ch == '\033')
  1127.         goto end;
  1128.     if (get_com("Automatic Searching? [yn]: ", &ch)) {
  1129.         if (ch == 'y' || ch == 'Y')
  1130.         i_ptr->flags |= TR_SEARCH;
  1131.     } else if (ch == '\033')
  1132.         goto end;
  1133.     if (get_com("Slow Digestion? [yn]: ", &ch)) {
  1134.         if (ch == 'y' || ch == 'Y')
  1135.         i_ptr->flags |= TR_SLOW_DIGEST;
  1136.     } else if (ch == '\033')
  1137.         goto end;
  1138.     if (get_com("Stealth? [yn]: ", &ch)) {
  1139.         if (ch == 'y' || ch == 'Y')
  1140.         i_ptr->flags |= TR_STEALTH;
  1141.     } else if (ch == '\033')
  1142.         goto end;
  1143.     if (get_com("Aggravate Monsters? [yn]: ", &ch)) {
  1144.         if (ch == 'y' || ch == 'Y')
  1145.         i_ptr->flags |= TR_AGGRAVATE;
  1146.     } else if (ch == '\033')
  1147.         goto end;
  1148.     if (get_com("Regeneration? [yn]: ", &ch)) {
  1149.         if (ch == 'y' || ch == 'Y')
  1150.         i_ptr->flags |= TR_REGEN;
  1151.     } else if (ch == '\033')
  1152.         goto end;
  1153.     if (get_com("Speed? [yn]: ", &ch)) {
  1154.         if (ch == 'y' || ch == 'Y')
  1155.         i_ptr->flags |= TR_SPEED;
  1156.     } else if (ch == '\033')
  1157.         goto end;
  1158.     if (get_com("Resist Fire? [yn]: ", &ch)) {
  1159.         if (ch == 'y' || ch == 'Y')
  1160.         i_ptr->flags |= TR_RES_FIRE;
  1161.     } else if (ch == '\033')
  1162.         goto end;
  1163.     if (get_com("Resist Cold? [yn]: ", &ch)) {
  1164.         if (ch == 'y' || ch == 'Y')
  1165.         i_ptr->flags |= TR_RES_COLD;
  1166.     } else if (ch == '\033')
  1167.         goto end;
  1168.     if (get_com("Resist Acid? [yn]: ", &ch)) {
  1169.         if (ch == 'y' || ch == 'Y')
  1170.         i_ptr->flags |= TR_RES_ACID;
  1171.     } else if (ch == '\033')
  1172.         goto end;
  1173.     if (get_com("Resist Lightning? [yn]: ", &ch)) {
  1174.         if (ch == 'y' || ch == 'Y')
  1175.         i_ptr->flags |= TR_RES_LIGHT;
  1176.     } else if (ch == '\033')
  1177.         goto end;
  1178.     if (get_com("Resist Poison? [yn]: ", &ch)) {
  1179.         if (ch == 'y' || ch == 'Y')
  1180.         i_ptr->flags |= TR_POISON;
  1181.     } else if (ch == '\033')
  1182.         goto end;
  1183.     if (get_com("Resist Confusion? [yn]: ", &ch)) {
  1184.         if (ch == 'y' || ch == 'Y')
  1185.         i_ptr->flags2 |= TR_RES_CONF;
  1186.     } else if (ch == '\033')
  1187.         goto end;
  1188.     if (get_com("Resist Sound? [yn]: ", &ch)) {
  1189.         if (ch == 'y' || ch == 'Y')
  1190.         i_ptr->flags2 |= TR_RES_SOUND;
  1191.     } else if (ch == '\033')
  1192.         goto end;
  1193.     if (get_com("Resist Light? [yn]: ", &ch)) {
  1194.         if (ch == 'y' || ch == 'Y')
  1195.         i_ptr->flags2 |= TR_RES_LT;
  1196.     } else if (ch == '\033')
  1197.         goto end;
  1198.     if (get_com("Resist Dark? [yn]: ", &ch)) {
  1199.         if (ch == 'y' || ch == 'Y')
  1200.         i_ptr->flags2 |= TR_RES_DARK;
  1201.     } else if (ch == '\033')
  1202.         goto end;
  1203.     if (get_com("Resist Chaos? [yn]: ", &ch)) {
  1204.         if (ch == 'y' || ch == 'Y')
  1205.         i_ptr->flags2 |= TR_RES_CHAOS;
  1206.     } else if (ch == '\033')
  1207.         goto end;
  1208.     if (get_com("Resist Disenchantment? [yn]: ", &ch)) {
  1209.         if (ch == 'y' || ch == 'Y')
  1210.         i_ptr->flags2 |= TR_RES_DISENCHANT;
  1211.     } else if (ch == '\033')
  1212.         goto end;
  1213.     if (get_com("Resist Shards? [yn]: ", &ch)) {
  1214.         if (ch == 'y' || ch == 'Y')
  1215.         i_ptr->flags2 |= TR_RES_SHARDS;
  1216.     } else if (ch == '\033')
  1217.         goto end;
  1218.     if (get_com("Resist Nexus? [yn]: ", &ch)) {
  1219.         if (ch == 'y' || ch == 'Y')
  1220.         i_ptr->flags2 |= TR_RES_NEXUS;
  1221.     } else if (ch == '\033')
  1222.         goto end;
  1223.     if (get_com("Resist Nether? [yn]: ", &ch)) {
  1224.         if (ch == 'y' || ch == 'Y')
  1225.         i_ptr->flags2 |= TR_RES_NETHER;
  1226.     } else if (ch == '\033')
  1227.         goto end;
  1228.     if (get_com("Resist Blindness? [yn]: ", &ch)) {
  1229.         if (ch == 'y' || ch == 'Y')
  1230.         i_ptr->flags2 |= TR_RES_BLIND;
  1231.     } else if (ch == '\033')
  1232.         goto end;
  1233.     if (get_com("Sustain a stat (Magic value 10 for all stats)? [yn]: ", &ch)) {
  1234.         if (ch == 'y' || ch == 'Y')
  1235.         i_ptr->flags |= TR_SUST_STAT;
  1236.     } else if (ch == '\033')
  1237.         goto end;
  1238.     if (get_com("See invisible? [yn]: ", &ch)) {
  1239.         if (ch == 'y' || ch == 'Y')
  1240.         i_ptr->flags |= TR_SEE_INVIS;
  1241.     } else if (ch == '\033')
  1242.         goto end;
  1243.     if (get_com("Free Action? [yn]: ", &ch)) {
  1244.         if (ch == 'y' || ch == 'Y')
  1245.         i_ptr->flags |= TR_FREE_ACT;
  1246.     } else if (ch == '\033')
  1247.         goto end;
  1248.     if (get_com("Feather Falling? [yn]: ", &ch)) {
  1249.         if (ch == 'y' || ch == 'Y')
  1250.         i_ptr->flags |= TR_FFALL;
  1251.     } else if (ch == '\033')
  1252.         goto end;
  1253.     if (get_com("Tunneling? [yn]: ", &ch)) {
  1254.         if (ch == 'y' || ch == 'Y')
  1255.         i_ptr->flags |= TR_TUNNEL;
  1256.     } else if (ch == '\033')
  1257.         goto end;
  1258.     if (get_com("Infra-vision? [yn]: ", &ch)) {
  1259.         if (ch == 'y' || ch == 'Y')
  1260.         i_ptr->flags |= TR_INFRA;
  1261.     } else if (ch == '\033')
  1262.         goto end;
  1263.     if (get_com("Resist life level loss? [yn]: ", &ch)) {
  1264.         if (ch == 'y' || ch == 'Y')
  1265.         i_ptr->flags2 |= TR_HOLD_LIFE;
  1266.     } else if (ch == '\033')
  1267.         goto end;
  1268.     if (get_com("Telepathy? [yn]: ", &ch)) {
  1269.         if (ch == 'y' || ch == 'Y')
  1270.         i_ptr->flags2 |= TR_TELEPATHY;
  1271.     } else if (ch == '\033')
  1272.         goto end;
  1273.     if (get_com("Immune to Fire? [yn]: ", &ch)) {
  1274.         if (ch == 'y' || ch == 'Y')
  1275.         i_ptr->flags2 |= TR_IM_FIRE;
  1276.     } else if (ch == '\033')
  1277.         goto end;
  1278.     if (get_com("Immune to Cold? [yn]: ", &ch)) {
  1279.         if (ch == 'y' || ch == 'Y')
  1280.         i_ptr->flags2 |= TR_IM_COLD;
  1281.     } else if (ch == '\033')
  1282.         goto end;
  1283.     if (get_com("Immune to Acid? [yn]: ", &ch)) {
  1284.         if (ch == 'y' || ch == 'Y')
  1285.         i_ptr->flags2 |= TR_IM_ACID;
  1286.     } else if (ch == '\033')
  1287.         goto end;
  1288.     if (get_com("Immune to Lightning? [yn]: ", &ch)) {
  1289.         if (ch == 'y' || ch == 'Y')
  1290.         i_ptr->flags2 |= TR_IM_LIGHT;
  1291.     } else if (ch == '\033')
  1292.         goto end;
  1293.     if (get_com("Immune to Poison? [yn]: ", &ch)) {
  1294.         if (ch == 'y' || ch == 'Y')
  1295.         i_ptr->flags2 |= TR_IM_POISON;
  1296.     } else if (ch == '\033')
  1297.         goto end;
  1298.     if (get_com("Give off Light? [yn]: ", &ch)) {
  1299.         if (ch == 'y' || ch == 'Y')
  1300.         i_ptr->flags2 |= TR_LIGHT;
  1301.     } else if (ch == '\033')
  1302.         goto end;
  1303.     if (get_com("Activatable Item? [yn]: ", &ch)) {
  1304.         if (ch == 'y' || ch == 'Y')
  1305.         i_ptr->flags2 |= TR_ACTIVATE;
  1306.     } else if (ch == '\033')
  1307.         goto end;
  1308.     if (get_com("Is it an Artifact? [yn]: ", &ch)) {
  1309.         if (ch == 'y' || ch == 'Y')
  1310.         i_ptr->flags2 |= TR_ARTIFACT;
  1311.     } else if (ch == '\033')
  1312.         goto end;
  1313.     if (get_com("Cursed? [yn]: ", &ch)) {
  1314.         if (ch == 'y' || ch == 'Y')
  1315.         i_ptr->flags |= TR_CURSED;
  1316.     } else if (ch == '\033')
  1317.         goto end;
  1318.     } /* end if TV_MAX_WEAR >= i_ptr->tval >= TV_MIN_WEAR -CFT */
  1319.     prt("Cost : ", 0, 0);
  1320.     if (!get_string(tmp_str, 0, 9, 8)) {
  1321.     restore_screen();
  1322.     return;
  1323.     }
  1324.     tmp_lval = atol(tmp_str);
  1325.     if (tmp_val != 0)
  1326.     i_ptr->cost = tmp_lval;
  1327.  
  1328.     prt("Dungeon Level on which it is found : ", 0, 0);
  1329.     if (!get_string(tmp_str, 0, 39, 3)) {
  1330.     restore_screen();
  1331.     return;
  1332.     }
  1333.     tmp_val = atoi(tmp_str);
  1334.     if (tmp_val != 0)
  1335.     i_ptr->level = tmp_val;
  1336.  
  1337.     j = 0;
  1338.     i = 0;
  1339.     k = 0;
  1340.     more = FALSE;
  1341. SNagain:
  1342.     restore_screen();
  1343.     save_screen();
  1344.     for (; i < SN_ARRAY_SIZE; i++) {
  1345.     sprintf(tmp_str, "%c) %s", 'a' + j, special_names[i]);
  1346.     prt(tmp_str, 1 + j, 0);
  1347.     j++;
  1348.     if (j == 21) {
  1349.         more = TRUE;
  1350.         break;
  1351.     }
  1352.     }
  1353.     if (more)
  1354.     prt("v) NEXT PAGE", 22, 0);
  1355.  
  1356.     do {
  1357.     if (!get_com("Please choose a secondary name for the item : ", &ch)) {
  1358.         restore_screen();
  1359.         return;
  1360.     }
  1361.     } while ((ch < 'a' && ch > ('a' + j)) || (more && ch < 'a' && ch > ('a' + j + 1)));
  1362.  
  1363.     if ((ch == 'v') && more) {
  1364.     more = FALSE;
  1365.     k += (j - 1);
  1366.     j = 0;
  1367.     goto SNagain;
  1368.     } else {
  1369.     i_ptr->name2 = k + (ch - 'a');
  1370.     }
  1371.     restore_screen();
  1372.     save_screen();
  1373.  
  1374. end:
  1375.     if (get_check("Allocate?")) {
  1376.     /* delete object first if any, before call popt */
  1377.     c_ptr = &cave[char_row][char_col];
  1378.     if (c_ptr->tptr != 0)
  1379.         (void)delete_object(char_row, char_col);
  1380.  
  1381.     store_bought(i_ptr);
  1382.     tmp_val = popt();
  1383.     t_list[tmp_val] = forge;
  1384.     c_ptr->tptr = tmp_val;
  1385.     msg_print("Allocated.");
  1386.     } else
  1387.     msg_print("Aborted.");
  1388.     restore_screen();
  1389. }
  1390.  
  1391.  
  1392. /* pause if screen fills up while printint up artifacts - cba */
  1393.  
  1394. void
  1395. artifact_screen_full(i, j)
  1396. int *i;
  1397. int  j;
  1398. {
  1399.     int t;
  1400.  
  1401. /* is screen full? */
  1402.     if (*i == 22) {
  1403.     prt("-- more --", *i, j);
  1404.     inkey();
  1405.     for (t = 2; t < 23; t++)
  1406.         erase_line(t, j);       /* don't forget to erase extra */
  1407.     prt("Artifacts seen: (continued)", 1, j + 5);
  1408.     *i = 2;
  1409.     }
  1410. }
  1411.  
  1412. /* Print out the artifacts seen without using a file - cba */
  1413.  
  1414. void
  1415. artifact_check_no_file()
  1416. {
  1417.     int i, j;
  1418.  
  1419.     save_screen();
  1420.     j = 15;
  1421.  
  1422.     for (i = 1; i < 23; i++)
  1423.     erase_line(i, j - 2);
  1424.  
  1425.     i = 1;
  1426.     prt("Artifacts Seen:", i++, j + 5);
  1427.  
  1428. /* weapons */
  1429.  
  1430.     if (AEGLIN) {
  1431.     prt("The Broadsword 'Aeglin'", i++, j);
  1432.     artifact_screen_full(&i, j);
  1433.     }
  1434.     if (AEGLOS) {
  1435.     prt("The Spear 'Aeglos'", i++, j);
  1436.     artifact_screen_full(&i, j);
  1437.     }
  1438.     if (AGLARANG) {
  1439.     prt("The Katana 'Aglarang'", i++, j);
  1440.     artifact_screen_full(&i, j);
  1441.     }
  1442.     if (ANDURIL) {
  1443.     prt("The Longsword 'Anduril'", i++, j);
  1444.     artifact_screen_full(&i, j);
  1445.     }
  1446.     if (ANGRIST) {
  1447.     prt("The Dagger 'Angrist'", i++, j);
  1448.     artifact_screen_full(&i, j);
  1449.     }
  1450.     if (ANGUIREL) {
  1451.     prt("The Longsword 'Anguirel'", i++, j);
  1452.     artifact_screen_full(&i, j);
  1453.     }
  1454.     if (ARUNRUTH) {
  1455.     prt("The Broadsword 'Arunruth'", i++, j);
  1456.     artifact_screen_full(&i, j);
  1457.     }
  1458.     if (AULE) {
  1459.     prt("The War Hammer of Aule", i++, j);
  1460.     artifact_screen_full(&i, j);
  1461.     }
  1462.     if (AVAVIR) {
  1463.     prt("The Scythe 'Avavir'", i++, j);
  1464.     artifact_screen_full(&i, j);
  1465.     }
  1466.     if (BALLI) {
  1467.     prt("The Battle Axe of Balli Stonehand", i++, j);
  1468.     artifact_screen_full(&i, j);
  1469.     }
  1470.     if (BARUKKHELED) {
  1471.     prt("The Broad Axe 'Barukkheled'", i++, j);
  1472.     artifact_screen_full(&i, j);
  1473.     }
  1474.     if (BELANGIL) {
  1475.     prt("The Dagger 'Belangil'", i++, j);
  1476.     artifact_screen_full(&i, j);
  1477.     }
  1478.     if (BLOODSPIKE) {
  1479.     prt("The Morningstar 'Bloodspike'", i++, j);
  1480.     artifact_screen_full(&i, j);
  1481.     }
  1482.     if (CALRIS) {
  1483.     prt("The Bastard Sword 'Calris'", i++, j);
  1484.     artifact_screen_full(&i, j);
  1485.     }
  1486.     if (CARETH) {
  1487.     prt("The Saber 'Careth Asdriag'", i++, j);
  1488.     artifact_screen_full(&i, j);
  1489.     }
  1490.     if (CRISDURIAN) {
  1491.     prt("The Executioner's Sword 'Crisdurian'", i++, j);
  1492.     artifact_screen_full(&i, j);
  1493.     }
  1494.     if (DEATHWREAKER) {
  1495.     prt("The Mace of Disruption 'Deathwreaker'", i++, j);
  1496.     artifact_screen_full(&i, j);
  1497.     }
  1498.     if (DETHANC) {
  1499.     prt("The Dagger 'Dethanc'", i++, j);
  1500.     artifact_screen_full(&i, j);
  1501.     }
  1502.     if (DOOMCALLER) {
  1503.     prt("The Blade of Chaos 'Doomcaller'", i++, j);
  1504.     artifact_screen_full(&i, j);
  1505.     }
  1506.     if (DURIN) {
  1507.     prt("The Great Axe of Durin", i++, j);
  1508.     artifact_screen_full(&i, j);
  1509.     }
  1510.     if (ELVAGIL) {
  1511.     prt("The Longsword 'Elvagil'", i++, j);
  1512.     artifact_screen_full(&i, j);
  1513.     }
  1514.     if (EONWE) {
  1515.     prt("The Great Axe of Eonwe", i++, j);
  1516.     artifact_screen_full(&i, j);
  1517.     }
  1518.     if (EORLINGAS) {
  1519.     prt("The Lance of Eorlingas", i++, j);
  1520.     artifact_screen_full(&i, j);
  1521.     }
  1522.     if (ERIRIL) {
  1523.     prt("The Quarterstaff 'Eriril'", i++, j);
  1524.     artifact_screen_full(&i, j);
  1525.     }
  1526.     if (FIRESTAR) {
  1527.     prt("The Morningstar 'Firestar'", i++, j);
  1528.     artifact_screen_full(&i, j);
  1529.     }
  1530.     if (FORASGIL) {
  1531.     prt("The Rapier 'Forasgil'", i++, j);
  1532.     artifact_screen_full(&i, j);
  1533.     }
  1534.     if (GILETTAR) {
  1535.     prt("The Short Sword 'Gilettar'", i++, j);
  1536.     artifact_screen_full(&i, j);
  1537.     }
  1538.     if (GLAMDRING) {
  1539.     prt("The Broadsword 'Glamdring'", i++, j);
  1540.     artifact_screen_full(&i, j);
  1541.     }
  1542.     if (GONDRICAM) {
  1543.     prt("The Cutlass 'Gondricam'", i++, j);
  1544.     artifact_screen_full(&i, j);
  1545.     }
  1546.     if (GURTHANG) {
  1547.     prt("The Two-Handed Sword 'Gurthang'", i++, j);
  1548.     artifact_screen_full(&i, j);
  1549.     }
  1550.     if (HARADEKKET) {
  1551.     prt("The Scimitar 'Haradekket'", i++, j);
  1552.     artifact_screen_full(&i, j);
  1553.     }
  1554.     if (LOTHARANG) {
  1555.     prt("The Battle Axe 'Lotharang'", i++, j);
  1556.     artifact_screen_full(&i, j);
  1557.     }
  1558.     if (MAEDHROS) {
  1559.     prt("The Main Gauche of Maedhros", i++, j);
  1560.     artifact_screen_full(&i, j);
  1561.     }
  1562.     if (MORMEGIL) {
  1563.     prt("The Two-Handed Sword 'Mormegil'", i++, j);
  1564.     artifact_screen_full(&i, j);
  1565.     }
  1566.     if (MUNDWINE) {
  1567.     prt("The Lochaber Axe 'Mundwine'", i++, j);
  1568.     artifact_screen_full(&i, j);
  1569.     }
  1570.     if (NAR) {
  1571.     prt("The Quarterstaff 'Nar-i-vagil'", i++, j);
  1572.     artifact_screen_full(&i, j);
  1573.     }
  1574.     if (NARTHANC) {
  1575.     prt("The Dagger 'Narthanc'", i++, j);
  1576.     artifact_screen_full(&i, j);
  1577.     }
  1578.     if (NIMLOTH) {
  1579.     prt("The Spear 'Nimloth'", i++, j);
  1580.     artifact_screen_full(&i, j);
  1581.     }
  1582.     if (NIMTHANC) {
  1583.     prt("The Dagger 'Nimthanc'", i++, j);
  1584.     artifact_screen_full(&i, j);
  1585.     }
  1586.     if (OLORIN) {
  1587.     prt("The Quarterstraff of Olorin", i++, j);
  1588.     artifact_screen_full(&i, j);
  1589.     }
  1590.     if (ORCRIST) {
  1591.     prt("The Broadsword 'Orcrist'", i++, j);
  1592.     artifact_screen_full(&i, j);
  1593.     }
  1594.     if (OROME) {
  1595.     prt("The Spear 'Orome'", i++, j);
  1596.     artifact_screen_full(&i, j);
  1597.     }
  1598.     if (OSONDIR) {
  1599.     prt("The Halberd 'Osondir'", i++, j);
  1600.     artifact_screen_full(&i, j);
  1601.     }
  1602.     if (PAIN) {
  1603.     prt("The Glaive of Pain", i++, j);
  1604.     artifact_screen_full(&i, j);
  1605.     }
  1606.     if (RILIA) {
  1607.     prt("The Dagger of Rilia", i++, j);
  1608.     artifact_screen_full(&i, j);
  1609.     }
  1610.     if (RINGIL) {
  1611.     prt("The Longsword 'Ringil'", i++, j);
  1612.     artifact_screen_full(&i, j);
  1613.     }
  1614.     if (STING) {
  1615.     prt("The Short Sword 'Sting'", i++, j);
  1616.     artifact_screen_full(&i, j);
  1617.     }
  1618.     if (TARATOL) {
  1619.     prt("The Mace 'Taratol'", i++, j);
  1620.     artifact_screen_full(&i, j);
  1621.     }
  1622.     if (THEODEN) {
  1623.     prt("The Beaked Axe of Theoden", i++, j);
  1624.     artifact_screen_full(&i, j);
  1625.     }
  1626.     if (THUNDERFIST) {
  1627.     prt("The Two-Handed Great Flail 'Thunderfist'", i++, j);
  1628.     artifact_screen_full(&i, j);
  1629.     }
  1630.     if (TIL) {
  1631.     prt("The Pike 'Til-i-arc'", i++, j);
  1632.     artifact_screen_full(&i, j);
  1633.     }
  1634.     if (TOTILA) {
  1635.     prt("The Flail 'Totila'", i++, j);
  1636.     artifact_screen_full(&i, j);
  1637.     }
  1638.     if (TURMIL) {
  1639.     prt("The Lucerne Hammer 'Turmil'", i++, j);
  1640.     artifact_screen_full(&i, j);
  1641.     }
  1642.     if (ULMO) {
  1643.     prt("The Trident of Ulmo", i++, j);
  1644.     artifact_screen_full(&i, j);
  1645.     }
  1646.     if (WRATH) {
  1647.     prt("The Trident of Wrath", i++, j);
  1648.     artifact_screen_full(&i, j);
  1649.     }
  1650.     if (ZARCUTHRA) {
  1651.     prt("The Two-Handed Sword 'Zarcuthra'", i++, j);
  1652.     artifact_screen_full(&i, j);
  1653.     }
  1654. /* missle weapons */
  1655.  
  1656.     if (BARD) {
  1657.     prt("The Longbow of Bard", i++, j);
  1658.     artifact_screen_full(&i, j);
  1659.     }
  1660.     if (BELEG) {
  1661.     prt("The Longbow of Beleg Cuthalion", i++, j);
  1662.     artifact_screen_full(&i, j);
  1663.     }
  1664.     if (CUBRAGOL) {
  1665.     prt("The Light Crossbow 'Cubragol'", i++, j);
  1666.     artifact_screen_full(&i, j);
  1667.     }
  1668.  
  1669. /* cloaks */
  1670.  
  1671.     if (COLANNON) {
  1672.     prt("The Cloak 'Colannon'", i++, j);
  1673.     artifact_screen_full(&i, j);
  1674.     }
  1675.     if (COLLUIN) {
  1676.     prt("The Cloak 'Colluin'", i++, j);
  1677.     artifact_screen_full(&i, j);
  1678.     }
  1679.     if (HOLCOLLETH) {
  1680.     prt("The Cloak 'Holcolleth'", i++, j);
  1681.     artifact_screen_full(&i, j);
  1682.     }
  1683.     if (LUTHIEN) {
  1684.     prt("The Shadow Cloak of Luthien", i++, j);
  1685.     artifact_screen_full(&i, j);
  1686.     }
  1687.     if (THINGOL) {
  1688.     prt("The Cloak of Thingol", i++, j);
  1689.     artifact_screen_full(&i, j);
  1690.     }
  1691.     if (THORONGIL) {
  1692.     prt("The Cloak of Thorongil", i++, j);
  1693.     artifact_screen_full(&i, j);
  1694.     }
  1695.     if (TUOR) {
  1696.     prt("The Shadow Cloak of Tuor", i++, j);
  1697.     artifact_screen_full(&i, j);
  1698.     }
  1699.  
  1700. /* armor */
  1701.  
  1702.     if (ANARION) {
  1703.     prt("The Large Metal Shield of Anarion", i++, j);
  1704.     artifact_screen_full(&i, j);
  1705.     }
  1706.     if (ARVEDUI) {
  1707.     prt("The Chain Mail of Arvedui", i++, j);
  1708.     artifact_screen_full(&i, j);
  1709.     }
  1710.     if (BELEGENNON) {
  1711.     prt("The Mithril Chain Mail 'Belegennon'", i++, j);
  1712.     artifact_screen_full(&i, j);
  1713.     }
  1714.     if (BERUTHIEL) {
  1715.     prt("The Iron Crown of Beruthiel", i++, j);
  1716.     artifact_screen_full(&i, j);
  1717.     }
  1718.     if (BLADETURNER) {
  1719.     prt("The Power Dragon Scale Mail 'Bladeturner'", i++, j);
  1720.     artifact_screen_full(&i, j);
  1721.     }
  1722.     if (CAMBELEG) {
  1723.     prt("The Leather Gloves 'Cambeleg'", i++, j);
  1724.     artifact_screen_full(&i, j);
  1725.     }
  1726.     if (CAMLOST) {
  1727.     prt("The Gauntlets 'Camlost'", i++, j);
  1728.     artifact_screen_full(&i, j);
  1729.     }
  1730.     if (CAMMITHRIM) {
  1731.     prt("The Leather Gloves 'Cammithrin'", i++, j);
  1732.     artifact_screen_full(&i, j);
  1733.     }
  1734.     if (CASPANION) {
  1735.     prt("The Augmented Chain Mail of Caspanion", i++, j);
  1736.     artifact_screen_full(&i, j);
  1737.     }
  1738.     if (CELEBORN) {
  1739.     prt("The Mithril Plate Mail of Celeborn", i++, j);
  1740.     artifact_screen_full(&i, j);
  1741.     }
  1742.     if (CELEGORM) {
  1743.     prt("The Large Leather Shield of Celegorm", i++, j);
  1744.     artifact_screen_full(&i, j);
  1745.     }
  1746.     if (DAL) {
  1747.     prt("The Soft Leather Boots 'Dal-i-thalion'", i++, j);
  1748.     artifact_screen_full(&i, j);
  1749.     }
  1750.     if (DOR_LOMIN) {
  1751.     prt("The Iron Helm of Dor-Lomin", i++, j);
  1752.     artifact_screen_full(&i, j);
  1753.     }
  1754.     if (FEANOR) {
  1755.     prt("The Hard Leather Boots of Feanor", i++, j);
  1756.     artifact_screen_full(&i, j);
  1757.     }
  1758.     if (FINGOLFIN) {
  1759.     prt("The Set of Cesti of Fingolfin", i++, j);
  1760.     artifact_screen_full(&i, j);
  1761.     }
  1762.     if (GONDOR) {
  1763.     prt("The Golden Crown of Gondor", i++, j);
  1764.     artifact_screen_full(&i, j);
  1765.     }
  1766.     if (GORLIM) {
  1767.     prt("The Iron Helm of Gorlim", i++, j);
  1768.     artifact_screen_full(&i, j);
  1769.     }
  1770.     if (HAMMERHAND) {
  1771.     prt("The Steel Helm 'Hammerhand'", i++, j);
  1772.     artifact_screen_full(&i, j);
  1773.     }
  1774.     if (HITHLOMIR) {
  1775.     prt("The Soft Leather Armour 'Hithlomir'", i++, j);
  1776.     artifact_screen_full(&i, j);
  1777.     }
  1778.     if (HOLHENNETH) {
  1779.     prt("The Iron Helm 'Holhenneth'", i++, j);
  1780.     artifact_screen_full(&i, j);
  1781.     }
  1782.     if (ISILDUR) {
  1783.     prt("The Full Plate Armour of Isildur", i++, j);
  1784.     artifact_screen_full(&i, j);
  1785.     }
  1786.     if (PAURAEGEN) {
  1787.     prt("The Gauntlets 'Pauraegen'", i++, j);
  1788.     artifact_screen_full(&i, j);
  1789.     }
  1790.     if (PAURHACH) {
  1791.     prt("The Gauntlets 'Paurhach'", i++, j);
  1792.     artifact_screen_full(&i, j);
  1793.     }
  1794.     if (PAURNEN) {
  1795.     prt("The Gauntlets 'Paurnen'", i++, j);
  1796.     artifact_screen_full(&i, j);
  1797.     }
  1798.     if (PAURNIMMEN) {
  1799.     prt("The Gauntlets 'Paurnimmen'", i++, j);
  1800.     artifact_screen_full(&i, j);
  1801.     }
  1802.     if (RAZORBACK) {
  1803.     prt("The Multi-Hued Dragon Scale Mail 'Razorback'", i++, j);
  1804.     artifact_screen_full(&i, j);
  1805.     }
  1806.     if (ROHAN) {
  1807.     prt("The Metal Brigandine Armor of the Rohirrim", i++, j);
  1808.     artifact_screen_full(&i, j);
  1809.     }
  1810.     if (SOULKEEPER) {
  1811.     prt("The Adamantine Plate Mail 'Soulkeeper'", i++, j);
  1812.     artifact_screen_full(&i, j);
  1813.     }
  1814.     if (THALKETTOTH) {
  1815.     prt("The Leather Scale Mail 'Thalkettoth'", i++, j);
  1816.     artifact_screen_full(&i, j);
  1817.     }
  1818.     if (THENGEL) {
  1819.     prt("The Metal Cap of Thengel", i++, j);
  1820.     artifact_screen_full(&i, j);
  1821.     }
  1822.     if (THORIN) {
  1823.     prt("The Small Metal Shield of Thorin", i++, j);
  1824.     artifact_screen_full(&i, j);
  1825.     }
  1826.     if (THRANDUIL) {
  1827.     prt("The Hard Leather Cap of Thranduil", i++, j);
  1828.     artifact_screen_full(&i, j);
  1829.     }
  1830.     if (THROR) {
  1831.     prt("The Pair of Metal Shod Boots of Thror", i++, j);
  1832.     artifact_screen_full(&i, j);
  1833.     }
  1834.  
  1835. /* amulets and necklaces */
  1836.  
  1837.     if (CARLAMMAS) {
  1838.     prt("The Amulet of Carlammas", i++, j);
  1839.     artifact_screen_full(&i, j);
  1840.     }
  1841.     if (INGWE) {
  1842.     prt("The Amulet of Ingwe", i++, j);
  1843.     artifact_screen_full(&i, j);
  1844.     }
  1845.     if (NECKLACE) {
  1846.     prt("The Amulet of the Dwarves", i++, j);
  1847.     artifact_screen_full(&i, j);
  1848.     }
  1849.  
  1850. /* light sources */
  1851.  
  1852.     if (PHIAL) {
  1853.     prt("The Phial of Galadriel", i++, j);
  1854.     artifact_screen_full(&i, j);
  1855.     }
  1856.     if (ELENDIL) {
  1857.     prt("The Star of Elendil", i++, j);
  1858.     artifact_screen_full(&i, j);
  1859.     }
  1860.     if (THRAIN) {
  1861.     prt("The Arkenstone of Thrain", i++, j);
  1862.     artifact_screen_full(&i, j);
  1863.     }
  1864.  
  1865. /* rings */
  1866.  
  1867.     if (BARAHIR) {
  1868.     prt("The Ring of Barahir", i++, j);
  1869.     artifact_screen_full(&i, j);
  1870.     }
  1871.     if (TULKAS) {
  1872.     prt("The Ring of Tulkas", i++, j);
  1873.     artifact_screen_full(&i, j);
  1874.     }
  1875.     if (NARYA) {
  1876.     prt("The Ring of Power 'Narya'", i++, j);
  1877.     artifact_screen_full(&i, j);
  1878.     }
  1879.     if (NENYA) {
  1880.     prt("The Ring of Power 'Nenya'", i++, j);
  1881.     artifact_screen_full(&i, j);
  1882.     }
  1883.     if (VILYA) {
  1884.     prt("The Ring of Power 'Vilya'", i++, j);
  1885.     artifact_screen_full(&i, j);
  1886.     }
  1887.     if (POWER) {
  1888.     prt("The One Ring", i++, j);
  1889.     artifact_screen_full(&i, j);
  1890.     }
  1891.  
  1892. /* morgoth's stuff */
  1893.  
  1894.     if (GROND) {
  1895.     prt("The Lead-Filled Mace 'Grond'", i++, j);
  1896.     artifact_screen_full(&i, j);
  1897.     }
  1898.     pause_line(i);
  1899.     restore_screen();
  1900. }
  1901.  
  1902.  
  1903. /* print out the status of uniques - cba */
  1904.  
  1905. void
  1906. unique_screen_full(i, j)
  1907. int *i;
  1908. int  j;
  1909. {
  1910.     int t;
  1911.  
  1912. /* is screen full? */
  1913.     if (*i == 22) {
  1914.     prt("-- more --", *i, j);
  1915.     inkey();
  1916.     for (t = 2; t < 23; t++)
  1917.         erase_line(t, j);       /* don't forget to erase extra */
  1918.     prt("Uniques: (continued)", 1, j + 5);
  1919.     *i = 2;
  1920.     }
  1921. }
  1922.  
  1923. void
  1924. check_uniques()
  1925. {
  1926.     int      i, j, k;
  1927.     bigvtype msg;
  1928.  
  1929.     save_screen();
  1930.     j = 15;
  1931.  
  1932.     for (i = 1; i < 23; i++)
  1933.     erase_line(i, j - 2);
  1934.  
  1935.     i = 1;
  1936.     prt("Uniques:", i++, j + 5);
  1937.  
  1938.     for (k = 0; k < (MAX_CREATURES - 1); k++) {
  1939.     if ((strlen(c_list[k].name) > 0) && (c_list[k].cdefense & UNIQUE)) {
  1940.         if (wizard) {
  1941.         sprintf(msg, "%s is %s.", c_list[k].name,
  1942.             (u_list[k].dead) ? "dead" : "alive");
  1943.         prt(msg, i++, j);
  1944.         unique_screen_full(&i, j);
  1945.         } else if (u_list[k].dead) {
  1946.         sprintf(msg, "%s is dead.", c_list[k].name);
  1947.         prt(msg, i++, j);
  1948.         unique_screen_full(&i, j);
  1949.         }
  1950.     }
  1951.     }
  1952.     pause_line(i);
  1953.     restore_screen();
  1954. }
  1955.